<?php
/**
 * Componente genérico para pool
 * @author willen
 */

class VotacaoComponent extends Component{
	
	var $tipo;
	var $tipoModel;
	var $tipoVotacao;
	var $tipoModelVotacao;
	var $usuario;
	var $candidato;
	
	// $tipo é um Model
	public function tipoVotacao($tipo){
		$this->tipoModelVotacao = ClassRegistry::init('Nota_'.$tipo);
		$this->tipoVotacao = 'Nota_'.$tipo;
		$this->tipoModel = ClassRegistry::init($tipo);
		$this->tipo = $tipo;
	}
	
	public function usuario($email){
		$this->usuario = $email;
	}
	
	public function candidatoAVoto($id){
		$this->candidato = $id;
	}
		
	public function voto($nota){
		$existe = $this->tipoModelVotacao->findByEmailAndId($this->usuario, $this->candidato);
		if(!$existe){
			if($this->tipoModelVotacao->save(array('email'=>$this->usuario, 'id'=>$this->candidato, 'nota'=>$nota))){
				$dados = $this->tipoModelVotacao->findByEmailAndId($this->usuario, $this->candidato);
				return $this->geraHashVotacao($dados[$this->tipoVotacao]);
			}
		}
		else{
			// TODO Tirar stack-trace das exceptions
			throw new MethodNotAllowedException('Você já votou nessa opção!');
		}
	}
	
	private function geraHashVotacao($dados){
		return md5($this->tipoVotacao.$dados['email'].$dados['nota'].$dados['created']);
	} 
	
//	public function ativarVoto($email, $produto){
//		$this->tipo->
//		$this->tipo->save(array('id'=>$id, 'ativo'=>1));
//	} 
	
}